<?php
/*
 * Padres asociados a un paciente y enfermedades.
 * @Autor: Andrés Ubilla.
 */
class Agregar extends TPage{
    
    public function onLoad($param){
        parent::onLoad($param);
        if(!$this->IsPostBack){
            $this->cargarInterfaz();
        }
    }
    
    private function cargarInterfaz(){
        $this->validarSession(); 
        $arrPadres = $this->obtenerPadres();
        $oPaciente = $this->obtenerDatosPaciente();
        $this->iniciarControles($arrPadres, $oPaciente);
    }
    
    private function validarSession(){
        $oUsuario = Util::getSession("Usuario");
        if(Util::isNullOrEmpty($oUsuario)){
            $this->Response->redirect($this->Service->constructUrl("Home"));
        }
    }        
    
    private function obtenerDatosPaciente(){
        try{
            $idPaciente = Util::isNull($this->Request["idPaciente"], "-1");

            $oPaciente = new Paciente();        

            if($idPaciente != "-1"){
                $oPacienteBLL = new PacienteBLL();
                $oPaciente = $oPacienteBLL->obtenerPorId($idPaciente);

                return $oPaciente;
            }else{              
                $oPaciente = null;
                return $oPaciente;
            }
        } catch (Exception $e){
            throw new Exception($e->getMessage());
        }        
    }
    
    private function obtenerPadres(){
        $idPaciente = Util::isNull($this->Request["idPaciente"], "-1");
        
        if($idPaciente != "-1"){
            try{        
                $oPadres = new Padres();
                $oPadresBLL = new PadresBLL();
                $arrPadres = $oPadresBLL->listar($idPaciente);
                return $arrPadres;
                
            }catch(Exception $e){
                throw new Exception($e->getMessage());
            }
        }
    }
    
    private function iniciarControles($arrPadres, $oPaciente){
        $this->AutoComplete->Attributes->Add("placeholder","Buscar paciente por rut o nombre");
        $this->txtNombre->Attributes->Add("required","required");
        $this->ddlTipo->Attributes->Add("required","required");
        
        if($oPaciente != null){
            try{
                $this->pnlFormAgregar->Visible = true;
                $this->imgPaciente->ImageUrl = $oPaciente->getImagen();
                $this->litNombrePaciente->Text = $oPaciente->getNombre() ." ". $oPaciente->getApellido();
            }catch(Exception $e){
                throw new Exception($e->getMessage());
            }
        }else{
            $this->litAlert->Text = Util::setMensajeUsuario("Debe seleccionar un paciente para registrar familiares, puede utilizar el buscardor.", Util::MENSAJE_ERROR); 
            $this->pnlFormAgregar->Visible = false;
        }
        
        if(count($arrPadres) > 0 && count($arrPadres) < 2){
            //$this->litAlert->Text = Util::setMensajeUsuario("El paciente tiene registrado un familiar en el sistema.", Util::MENSAJE_ALERTA);
            $this->litInfoFamiliares->Text = "<div class='label label-info' style='position: relative; margin-top: 10px; padding: 20px; text-align: center;'><span>Paciente ya tiene registrado un familiar, puede ingresar otro registro a este paciente.</span></div>";
        }else if(count($arrPadres) > 0 && count($arrPadres) == 2){
            $this->pnlFormAgregar->Visible = false;
            $this->litAlert->Text = Util::setMensajeUsuario("El paciente ya tiene registrado sus 2 familiares directos.", Util::MENSAJE_OK); 
            $this->litInfoFamiliares->Text = "<div class='label label-success' style='position: relative; margin-top: 10px; padding: 20px; text-align: center;'><span>Paciente ya tiene registrado 2 familiares, puede ver la informaci&oacute;n <a href='?page=Padres.Listar&idPaciente=".$oPaciente->getId()."' style='color: #F8BDB2;'>AQU&Iacute;</a>.</span></div>";
        }
    }
    
    public function btnRegistrarPadreOnClick($sender, $param){
        $idPaciente = Util::isNull($this->Request["idPaciente"], "-1");
        
        if($idPaciente != "-1"){
            try{
                $oPadres = new Padres();
                $oPadres->setNombre($this->txtNombre->Text);
                $oPadres->setTipo($this->ddlTipo->SelectedValue);
                $oPadres->setIdPaciente($idPaciente);
                $oPadres->setEstado(1);

                $oPadresBLL = new PadresBLL();
                $idPadre = $oPadresBLL->grabar($oPadres);

                if(is_int($idPadre) && $idPadre > 0){
                    $this->cargarInterfaz();
                    $this->limpiarForm();
                    $this->litAlert->Text = Util::setMensajeUsuario("Familiar registrado exitosamente a paciente.", Util::MENSAJE_OK);                    
                }else{   
                    $this->litAlert->Text = Util::setMensajeUsuario("Error al registrar el Familiar, por facor, vuelva a intentarlo.", Util::MENSAJE_ERROR);
                }  
                
            }catch(Exception $e){
                throw new Exception($e->getMessage());
            }
        }
    }
    
    private function limpiarForm(){
        $this->txtNombre->Text = "";
        $this->ddlTipo->SelectedValue = "";
    }
    
    public function buscarPacientes($sender,$param) {        
        $consulta = $param->getToken();
        
        $oPacienteBLL = new PacienteBLL();
        
        $arrPacientes = $oPacienteBLL->obtenerPorBusqueda($consulta);
        $listaPacientes = array();
                
        foreach ($arrPacientes as $row){
            $paciente = array('id' => $row->getId(), 'paciente' => $row->getNombre());
            $listaPacientes[] = $paciente;
        }

        $this->AutoComplete->DataSource = $listaPacientes;
        $this->AutoComplete->dataBind();
    }
    
    public function pacienteSeleccionado($sender,$param){              
        $id = $sender->Suggestions->DataKeys[ $param->selectedIndex ];
        
        if($id > 0){
            $this->Response->redirect("index.php?page=Padres.Agregar&idPaciente=" . $id);
        }else{
            $this->Response->redirect("index.php?page=Paciente.Agregar");
        }        
    }    
}
?>
